<?php
/**
 * Created by PhpStorm.
 * User: guokunsheng
 * Date: 2018/6/12
 * Time: 21:47
 */

namespace app\common\validate;

use think\Validate;

/**
 * 档案相关校验
 * Class Recode
 * @package app\common\validate
 */
class Recode extends Validate
{
    protected $field = [
        'id' => '档案指定',
        'name' => '档案名称',
        'type' => '档案类型',
        'year' => '出生时间-年',
        'month' => '出生时间-月',
        'day' => '出生时间-日',
        'hour' => '出生时间-时',
        'minute' => '出生时间-分',
        'timezone' => '出生时间-时区',
        'birth_country' => '出生地点-省',
        'birth_province' => '出生地点-市',
        'birth_city' => '出生地点-区',
        'live_country' => '现居地-省',
        'live_province' => '现居地-市',
        'live_city' => '现居地-区',
        'comments' => '档案标签',
        'isself' => '是否自己档案',
        'long_deg' => '经度-度',
        'long_min' => '经度-分',
        'ew' => '东经|西经',
        'lat_deg' => '纬度-度',
        'lat_min' => '纬度-分',
        'ns' => '南纬北纬',
//        'avatar' => '头像地址',
        'is_summer' => '是否夏令时',
        'uid' => '用户',

        'birth_time' => '出生时间',
        'birth_place' => '出生地点',
        'longitude' => '经度',
        'latitude' => '纬度',
        'avatar' => '微信头像',
    ];
    protected $rule = [
        'id' => 'require|integer',
        'name' => 'require|max:10', //require|chsDash|max:10
        'type' => 'require|integer|in:1,2,3,4,5,6',// 档案类型  1男 | 2 女 | 3 男同 | 4 女同 | 5 事件 | 6 卜卦
        'year' => 'require|integer|between:1000,2999|checkDate',// 出生时间-年
        'month' => 'require|integer|between:1,12',
        'day' => 'require|integer|between:1,31',
        'hour' => 'require|integer|between:0,23',
        'minute' => 'require|integer|between:0,59',
        'timezone' => 'require|integer|between:-12,12',
//        'birth_country' => 'require',
//        'birth_province' => 'require',
//        'birth_city' => 'require',
        'live_country' => 'require',
        'live_province' => 'require',
        'live_city' => 'require',
        'comments' => 'require|chs|in:自己,恋人,朋友,亲友,工作,客户,案例,其他',
        'isself' => 'require|integer|in:0,1',// 档案是否为自己 0 否 | 1 是（自己的档案无法删除，无法更改为其他标签）
        'long_deg' => 'require|integer|between:0,180|checkLong',
        'long_min' => 'require|integer|between:0,59',
        'ew' => 'require|integer|in:1,-1',
        'lat_deg' => 'require|integer|between:0,90|checkLat',
        'lat_min' => 'require|integer|between:0,59',
        'ns' => 'require|integer|in:1,-1',
//        'avatar' => 'url',
        'is_summer' => 'require|integer|in:0,1',
        'uid' => 'require|integer',
        'birth_time' => 'require|checkBirthtime',
        'birth_place' => 'require|checkBirthplace',
        'longitude' => 'require|between:-180,180',
        'latitude' => 'require|between:-90,90',
        'avatar' => 'require',

    ];
    protected $scene = [
        'add' => ['name', 'type', 'year', 'month', 'day', 'hour', 'minute', 'timezone', 'birth_country', 'birth_province', 'birth_city', 'live_country', 'live_province', 'live_city', 'comments', 'isself', 'long_deg', 'long_min', 'ew', 'lat_deg', 'lat_min', 'ns', 'is_summer'],
        'edit' => ['id', 'name', 'type', 'year', 'month', 'day', 'hour', 'minute', 'timezone', 'birth_country', 'birth_province', 'birth_city', 'live_country', 'live_province', 'live_city', 'comments', 'isself', 'long_deg', 'long_min', 'ew', 'lat_deg', 'lat_min', 'ns', 'is_summer'],
        'del' => ['id', 'uid'],
        'wechat_add' => ['uid', 'birth_time', 'birth_place', 'longitude', 'latitude', 'avatar']
    ];

    protected $message = [
        'long_deg.checkLong' => '经度只能在0°0′ - 180°0′之间',
        'lat_deg.checkLat' => '纬度只能在0°0′ - 90°0′之间',
    ];

    /**
     * 验证日期是否为有效时间
     * @param string $value 当前字段值
     * @param string $rule 规则
     * @param array $data 全部字段数组
     * @return bool
     */
    protected function checkDate($value, $rule, $data)
    {
        $date = $data['year'] . '-' . $data['month'] . '-' . $data['day'] . ' ' . $data['hour'] . ':' . $data['minute'];

        $result = false !== strtotime($date);

        return $result;
    }

    /**
     * 检测出生地点是否含有 undefined
     * @param $value
     * @param $rule
     * @param $data
     * @return bool
     */
    protected function checkBirthplace($value, $rule, $data)
    {
        $result = false === strpos($value, 'undefined');

        return $result;
    }

    /**
     * 检测出生时间是否合法
     * @param $value
     * @param $rule
     * @param $data
     * @return bool
     */
    protected function checkBirthtime($value, $rule, $data)
    {
        $result = false !== strtotime($value);

        return $result;
    }

    /**
     * 经度检查是否合法
     * @param $value
     * @param $rule
     * @param $data
     * @return bool
     */
    protected function checkLong($value, $rule, $data)
    {
        if($value >= 180 && $data['long_min'] > 0){
            return false;
        }

        return true;
    }

    /**
     * 纬度检查是否合法
     * @param $value
     * @param $rule
     * @param $data
     * @return bool
     */
    protected function checkLat($value, $rule, $data)
    {
        if($value >= 90 && $data['lat_min'] > 0){
            return false;
        }

        return true;
    }
}
